package com.example.yxwheather.ui.login


import android.content.Intent
import android.os.Bundle
import android.view.LayoutInflater
import android.widget.Toast
import androidx.lifecycle.lifecycleScope
import com.example.yxwheather.MainActivity
import com.example.yxwheather.base.BaseBindingActivity
import com.example.yxwheather.bean.LoginRequest
import com.example.yxwheather.databinding.AcLoginBinding
import com.example.yxwheather.storage.TokenPreferences
import com.example.yxwheather.util.RetrofitClient
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext


class LoginActivity : BaseBindingActivity<AcLoginBinding>() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // 设置登录按钮点击事件监听器
        binding.tvLogin.setOnClickListener {
//            Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show()
            doLogin()
        }
    }

    fun doLogin() {
        // 1. 获取用户输入的账号和密码
        val username = binding.etUsername.text.toString()
        val password = binding.etPassword.text.toString()

        // 2. 账号或密码为空，显示错误提示
        if (username.isEmpty() || password.isEmpty()) {
            Toast.makeText(this, "请填写账号和密码", Toast.LENGTH_SHORT).show()
            return
        }
        /**
         * 执行用户登录流程
         *
         * 该函数处理用户登录的完整流程，包括网络请求、响应处理和页面跳转。
         * 使用Retrofit发起登录请求，在IO线程中执行网络操作，主线程中更新UI。
         * 登录成功后会跳转到主页面，失败时显示错误提示。
         */
        try {
            lifecycleScope.launch withContext@{
                // 创建登录请求对象，传入用户名和密码
                val req = LoginRequest(username, password)

                // 在IO线程中执行网络请求
                val res = withContext(Dispatchers.IO) {
                    RetrofitClient.apiService.login(req)
                }

                // 处理登录响应结果
                if (res.code == 10000) {
                    // 从响应中获取token
                    val token = res.data?.token
                    //保存token
                    if (token.isNullOrEmpty()) {
                        // 处理token为空的情况
                        Toast.makeText(this@LoginActivity, "登录失败", Toast.LENGTH_SHORT).show()
                        return@withContext
                    }
                    // 持久化存储token
                    TokenPreferences.getInstance(this@LoginActivity).saveToken(token.toString())

                    // 显示登录成功的Toast提示
                    Toast.makeText(this@LoginActivity, token, Toast.LENGTH_SHORT).show()

                    // 启动MainActivity并结束当前Activity
                    startActivity(Intent(this@LoginActivity, MainActivity::class.java))
                    finish()
                } else {
                    // 处理响应失败的情况
                    Toast.makeText(
                        this@LoginActivity,
                        "登录失败",
                        Toast.LENGTH_SHORT
                    ).show()
                }
            }
        } catch (e: Exception) {
            // 处理网络异常等错误情况
            Toast.makeText(this, "登录失败", Toast.LENGTH_SHORT).show()
        }

    }

    //  初始化绑定
    override fun initBinding(layoutInflater: LayoutInflater): AcLoginBinding {
        return AcLoginBinding.inflate(layoutInflater)
    }
}